/**
 * 
 */
package net.sahv.bdyz.controller.member;

import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;

import net.sahv.bdyz.model.Admin;
import net.sahv.bdyz.model.Domain;
import net.sahv.bdyz.model.Member;
import net.sahv.bdyz.service.AdminService;
import net.sahv.bdyz.service.DomainService;
import net.sahv.bdyz.service.MemberAttentionService;
import net.sahv.bdyz.service.MemberService;
import net.sahv.bdyz.util.ImgUtil;

/**
 * @author 张天敏
 * @date 日期：2016年8月8日 时间：下午7:29:48
 */
@Controller
@RequestMapping("member/member")
public class MMemberController {
	
	@Autowired
	private MemberService memberService;
	
	@Autowired
	private AdminService adminService;
	@Autowired
	private MemberAttentionService memberAttentionService;// 会员关注
	@Autowired
	private DomainService domainService;
	
	@Autowired 
	CookieLocaleResolver resolver;
	
	/**
	 * 跳转到个人中心
	 * @author 张天敏
	 * @date 日期：2016年8月8日 时间：下午7:30:43
	 * @return
	 */
	@RequestMapping(value="/{stringUrl}/index",method=RequestMethod.GET)
	public String index(Model model,@PathVariable("stringUrl") String stringUrl,HttpServletRequest request,HttpServletResponse response){
		HttpSession session=request.getSession();
		Object languageObj=session.getAttribute("language");
		if(languageObj!=null){
			String language=String.valueOf(languageObj);
			if(language!=null&&!language.equals("")){
				language=language.toLowerCase();
				if (language.equals("en")) {
					resolver.setLocale(request, response, Locale.ENGLISH );
				}else{
					resolver.setLocale(request, response, Locale.CHINA );
				}
			}
		}
        if(session.getAttribute("mId") == null){
        	return "web/main/index";
        }else{
			Member member = memberService.getCurrent();
        	String[] stringUrlArr=stringUrl.split("-");
    		model.addAttribute("urlString", stringUrlArr[0]);
    		model.addAttribute("indexId", stringUrlArr[1]);
			model.addAttribute("member", member);
    		return "member/index";
        }
	}
	
	/**
	 * 跳转到个人信息界面
	 * @author 张天敏
	 * @date 日期：2016年8月8日 时间：下午8:07:12
	 * @return
	 */
	@RequestMapping(value="memberInfomation",method=RequestMethod.GET)
	public String memberInfomation(HttpServletRequest request,Model model){
		HttpSession session=request.getSession();
		String id =session.getAttribute("mId").toString();
		Member members=memberService.selectByPrimaryKey(Integer.valueOf(id));
		//查询省级行政区划
		List<Domain> provinceList=domainService.selectByParentId("0");
		/*--任凯伟修改*/
		// 市 区列表
		String address="";
		if (members.getmProvince() != null) {
			Domain pDomain=domainService.findByCode(members.getmProvince());
			if(pDomain!=null){
				address += pDomain.getdName();
			}
			List<Domain> cList = domainService.selectByParentId(members.getmProvince());
			model.addAttribute("cList", cList);
		}
		// 区县列表
		if (members.getmCity() != null) {
			Domain cDomain = domainService.findByCode(members.getmCity());
			if (cDomain != null) {
				address += "-" + cDomain.getdName();
			}
			List<Domain> aList = domainService.selectByParentId(members.getmCity());
			model.addAttribute("aList", aList);
		}
		// 区县列表
		if (members.getmArea() != null) {
			Domain aDomain = domainService.findByCode(members.getmArea());
			if (aDomain != null) {
				address += "-" + aDomain.getdName();
			}
		}
        model.addAttribute("member", members);
		model.addAttribute("address", address);
        model.addAttribute("provinceList", provinceList);
		return "member/member/memberInfomation";
	}
	
	/**
	 * 修改密码
	 * @author 张天敏
	 * @date 日期：2016年8月8日 时间：下午8:20:03
	 * @return
	 */
	@RequestMapping(value="modifyPassword",method=RequestMethod.GET)
	public String modifyPassword(){
		return "member/member/modifyPassword";
	}

	/**
	 * 
	 * @author 作者 : 任凯伟
	 * @date 创建时间：2016年8月18日 下午5:42:30
	 * @version 1.0
	 * @see 检查原密码
	 * @param
	 * @parameter
	 * @since
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value = "checkPassword")
	public String checkPassword(HttpServletRequest request, String passwordRaw, String password) {
		Member member = memberService.getCurrent();
		if (member != null) {
			if (passwordRaw != null && DigestUtils.md5Hex(passwordRaw).equals(member.getmPassword())) {
				return "1";// 密码正确
			} else {
				return "2";// 密码错误
			}
		} else {
			return "3";// 重新登录
		}

	}
	
	/**
	 * 修改密码
	 * @param request
	 * @param password
	 * @return
	 * 张羽鹏
	 * 2016年8月9日09:19:03
	 */
	@ResponseBody
	@RequestMapping(value="changePassword")
	public String changePassword(HttpServletRequest request,String passwordRaw,String password){
		Member member = memberService.getCurrent();
		if (member != null) {

			if (password != null) {
				int i = memberService.updateUserMessage(null, null, null, null, member.getmId(),
						DigestUtils.md5Hex(password),null,null,null);
				if (i > 0) {
					return "1";// 修改成功
				} else {
					return "0";// 修改失败
				}
			} else {
				return "2";// 密码参数为空
			}

		} else {
			return "3";// 重新登录
		}

	}
	
	/**
	 * 修改个人信息
	 * @date 日期：2016年8月23日 时间：下午3:59:57
	 * @param request
	 * @param response
	 * @param mId
	 * @param nickname
	 * @param ipone
	 * @param adress
	 * @param email
	 * @param mFixedTelephone
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value="/accountManage",method=RequestMethod.POST)
	public String accountManage( HttpServletRequest request,HttpServletResponse response, Integer mId, String nickname,
			 String ipone, String domain, String email,String mFixedTelephone){
		ImgUtil imgUtil=new ImgUtil();
		HttpSession session = request.getSession();
		if(session.getAttribute("mId") == null){
        	return "web/main/index";
        }else{
        	String image = imgUtil.uploadImg(request, "releaseNeed", "image");
    		if( image != null){
    			if(!image.equals("1") ){
					int i = memberService.updateUserMessage(null, null, null, image, mId, null, null, null, null);
    				if(i==1){
    					Member members=memberService.selectByPrimaryKey(Integer.valueOf(session.getAttribute("mId").toString()));
    					session.setAttribute("member", members);
						return "1";
    				}
    			}
    		}
    		
    		if (nickname != null ) {
				int i = memberService.updateUserMessage(nickname, null,  null, null, mId, null,null,null,null);
    			if(i==1){
    				Member member=memberService.selectByPrimaryKey(mId);
    				session.removeAttribute("member");
    				session.setAttribute("member", member);
					return "1";
    			}
    		}
    		
    		if (mFixedTelephone != null) {
				int i = memberService.updateUserMessage(null, null, mFixedTelephone, null, mId, null,null,null,null);
    			if( i==1){
    				Member member=memberService.selectByPrimaryKey(mId);
    				session.removeAttribute("member");
    				session.setAttribute("member", member);
					return "1";
    			}
    		}
    		
    		if (email != null) {
				int i = memberService.updateUserMessage(null, email, null, null, mId, null,null,null,null);
    			if( i==1){
    				Member member=memberService.selectByPrimaryKey(mId);
    				session.removeAttribute("member");
    				session.setAttribute("member", member);
					return "1";
    		}
    		}
    		
    		if (domain != null) {
    			
    			Map<String,Object> map=domainInterceptors(request);
    			boolean flag=(boolean) map.get("flag");
    			if(flag){
    				String mProvince=(String) map.get("mProvince");
    				String mCity=(String) map.get("mCity");
    				String mArea=(String) map.get("mArea");
    				int i = memberService.updateUserMessage(null, null, null,null, mId, null,mProvince,mCity,mArea);
    				if( i==1){
    					Member member=memberService.selectByPrimaryKey(mId);
    					session.removeAttribute("member");
    					session.setAttribute("member", member);
    					return "1";
    				}
    			}
    			
    		}
			return "0";
        }
		
	}
	
	/**
	 * @author 张天敏
	 * @date 日期：2016年10月9日 时间：下午3:43:01
	 * @param request
	 * @return
	 */
	private Map<String,Object> domainInterceptors(HttpServletRequest request) {
		boolean flag=false;
		Map<String,Object> map=new HashMap<String,Object>();
		String mProvince=request.getParameter("province");
		String mCity=request.getParameter("city");
		String mArea=request.getParameter("area");
		if(mProvince!=null&&!mProvince.trim().equals("")){
			flag=true;
		}else{
			flag=false;
			map.put("flag", flag);
			return map;
		}
		if(mCity!=null&&!mCity.trim().equals("")){
			flag=true;
		}else{
			flag=false;
			map.put("flag", flag);
			return map;
		}
		if(mArea!=null&&!mArea.trim().equals("")){
			flag=true;
		}else{
			flag=false;
			map.put("flag", flag);
			return map;
		}
		map.put("flag", flag);
		map.put("mProvince", mProvince);
		map.put("mCity", mCity);
		map.put("mArea", mArea);
		
		return map;
	}

	/**
	 * 跳转到收货地址页面
	 * @author 张天敏
	 * @date 日期：2016年8月9日 时间：上午9:10:18
	 * @return
	 */
	@RequestMapping(value="reciveAddress",method=RequestMethod.GET)
	public String reciveAddress(){
		return "forward:/web/address/addresslist";
	}
	
	/**
	 * 新增收货地址
	 * @author 张天敏
	 * @date 日期：2016年8月9日 时间：上午9:21:59
	 * @return
	 */
	@RequestMapping(value="insertReciveAddress",method=RequestMethod.GET)
	public String insertReciveAddress(){
		return "member/member/insertReciveAddress";
	}
	
	/**
	 * 跳转到我的业务员页面
	 * @author 张天敏
	 * @date 日期：2016年8月9日 时间：上午9:37:33
	 * @return
	 */
	@RequestMapping(value="myBusiness",method=RequestMethod.GET)
	public String myBusiness(Model model, HttpServletRequest request){
		HttpSession session = request.getSession();
		if(session.getAttribute("mId") == null){
        	return "web/main/index";
        }else{
        	Member members=memberService.selectByPrimaryKey(Integer.valueOf(session.getAttribute("mId").toString()));
			if (members.getmMessage1() != null) {
				Admin admin = adminService.selectByPrimaryKey(Integer.valueOf(members.getmMessage1()));
				model.addAttribute("admin", admin);
			}
        }
		return "member/member/myBusiness";
	}
	
	
	/**
	 * 跳转到我的订单页面
	 * @author 张天敏
	 * @date 日期：2016年8月9日 时间：下午4:17:16
	 * @return
	 */
	@RequestMapping(value="myOrder",method=RequestMethod.GET)
	public String myOrder(){
		return "forward:/web/orders/orderslist";
	}
	
	/**
	 * 跳转到购物车页面
	 * @author 张天敏
	 * @date 日期：2016年8月9日 时间：下午4:22:58
	 * @return
	 */
	@RequestMapping(value="shoppingCart",method=RequestMethod.GET)
	public String shoppingCart(){
		return "forward:/web/shoppingcart/viewshoppingcart";
	}
	/**
	 * 跳转到订单详情页
	 * @author 张天敏
	 * @date 日期：2016年8月9日 时间：下午4:36:01
	 * @return
	 */
	@RequestMapping(value="orderDetailToPaid",method=RequestMethod.GET)
	public String orderDetailToPaid(){
		return "member/member/orderDetailToPaid";
	}

	/**
	 * 
	 * @author 作者 : 任凯伟
	 * @date 创建时间：2016年8月12日 下午2:13:24
	 * @version 1.0
	 * @see 关注
	 * @param
	 * @parameter type 关注类型 1 面料 2 花型 aId 关注对象 id
	 * @since
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value = "attention", method = RequestMethod.POST)
	public int attention(Integer type, Integer aId) {
		Member mem = memberService.getCurrent();
		if (mem != null && type != null && aId != null) {
			boolean isAttention = memberAttentionService.attentionOrNot(mem.getmId(), type, aId);
			if (isAttention) {
				int count = memberAttentionService.cancelAttention(mem.getmId(), type, aId);
				if (count > 0) {
					return 1;
				}
			} else {
				int count = memberAttentionService.addAttention(mem.getmId(), type, aId);
				if (count > 0) {
					return 2;
				}
			}
		}
		return 0;
	}
	
	/**
	 * 获取市一级行政区划
	 * @author 张天敏
	 * @date 日期：2016年9月26日 时间：上午11:06:55
	 * @param pId
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value = "/domainList", method = RequestMethod.POST)
	public ApiResult domainList(String pId){
		ApiResult result=new ApiResult();
		List<Domain> domainList=domainService.selectByParentId(pId);
		if(domainList!=null&&domainList.size()>0){
			result.data.put("domainList", domainList);
			result.msg.status=0;
			result.msg.desc="查询成功！";
		}else{
			result.msg.status=1;
			result.msg.desc="查询失败！";
		}
		
		return result;
	}
	

}
